package praktikum_I.blatt_I.aufgabe1;

import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

public class Mittelwert_VarianzTest {

    Mittelwert_Varianz_inter messObj0 = new Mittelwert_Varianz("messObjNull");
    Mittelwert_Varianz_inter messObj1 = new Mittelwert_Varianz("messObj1");
    Mittelwert_Varianz_inter messObj2 = new Mittelwert_Varianz("messObj2");
    Mittelwert_Varianz_inter messObj3 = new Mittelwert_Varianz("messObj3");
    Mittelwert_Varianz_inter messObj4 = new Mittelwert_Varianz("messObj4");

    private Mittelwert_Varianz_inter fill2(int anzahl, int hoechstwert, Mittelwert_Varianz_inter obj){
        Random zufallswert = new Random(hoechstwert);
            for (int i = 0; i < anzahl; i++)
                obj.addMesswert(zufallswert.nextDouble());
        return obj;
    }


    @Test
    public void testLengthMessreihe() throws Exception {
        err("======> lenghtMessreihe <========");
        messObj0 = fill2(16, 2000, messObj0);
        messObj1 = fill2(17,2000,messObj1);
        assertEquals("lengthMessreihe", 16,messObj0.lengthMessreihe());
        assertEquals("lengthMessreihe", 17,messObj1.lengthMessreihe());
    }


    @Test
    public void testAddMesswert() throws Exception {
        err("======> AddMesswert <========");
        assertTrue(messObj2.getMessreihe().isEmpty());
         messObj2.addMesswert(3.0);
         assertEquals("AddMesswert", 1, messObj2.lengthMessreihe());
         assertEquals("AddMesswert", 3.0, messObj2.getMessreihe().get(0), 0.0);
    }

    @Test
    public void testCalculateMittelwert() throws Exception {
       err("======> CalculateMittelwert <========");
       messObj4 =  fill2(1000, 2000, messObj4);
       assertEquals("Mittelwert: ", messObj4.calculateMittelwert(), messObj4.calculateMittelwert2(),0.0);

        messObj3.addMesswert(2.0);
        messObj3.addMesswert(1.5);
        messObj3.addMesswert(2.5);


        assertEquals("Mittelwert: ", messObj3.calculateMittelwert(), messObj3.calculateMittelwert2(),0.0);

        err("=== Prüfung: 2 erwartet : " + messObj3.calculateMittelwert());
       err("============================");
    }

    @Test
    public void testCalculateVarianz() throws Exception {
        err("======> CalculateVarianz <========");
        messObj4 =  fill2(1000, 2000, messObj4);
        assertEquals("Varianz: ", messObj4.calculateVarianz(), messObj4.calculateVarianz2(),0.0001);

        messObj3.addMesswert(1.0);
        messObj3.addMesswert(2.0);
        messObj3.addMesswert(3.0);
        messObj3.addMesswert(4.0);
        messObj3.addMesswert(5.0);
        err("V1: " + messObj3.calculateVarianz());
        assertEquals("Varianz: ", messObj3.calculateVarianz(), messObj3.calculateVarianz2(),0.0);
        err("=== Prüfung: 2,5 erwartet : " + messObj3.calculateVarianz());
        err("============================");

    }


    private void err(String str){
        System.err.println(str);
    }
}
